const { app, BrowserWindow, Menu, MenuItem } = require("electron");
const path = require("path");
const pkg = require("./package.json");

let mainWindow;

function createWindow() {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, "preload.js"),
      spellcheck: true,
      contextIsolation: true,
      nodeIntegration: false,
    },
  });
  // 加载应用----react 打包
  /* mainWindow.loadURL(
    url.format({
      pathname: path.join(__dirname, "./build/index.html"),
      protocol: "file:",
      slashes: true,
    })
  ); */
  
  // 加载应用----适用于 react 项目和开发阶段npm run electron

  mainWindow.loadURL("http://localhost:3000/");
  mainWindow.on("closed", function () {
    mainWindow = null;
  });

  // 打开开发者工具
  // mainWindow.webContents.openDevTools();
  // 设置窗口为全屏
  mainWindow.maximize();
}

// 当 Electron 完成初始化并准备创建窗口时调用该方法
app.whenReady().then(() => {
  // 设置应用程序的默认语言为中文（简体）
  app.commandLine.appendSwitch("lang", "zh-CN");

  createWindow();

  app.on("activate", function () {
    // 在 macOS 上点击应用程序的 dock 图标时，如果没有窗口打开则创建一个新的窗口
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

// app.on("ready", createWindow);

app.on("window-all-closed", function () {
  if (process.platform !== "darwin") app.quit();
});

app.on("activate", function () {
  if (mainWindow === null) createWindow();
});
// 菜单
const menuBar = [
  {
    label: "文件(F)",
    submenu: [
      {
        label: "打开",
        accelerator: "ctrl+o",
      },
      {
        label: "保存",
        accelerator: "ctrl+s",
      },
      {
        label: "最近打开的文件",
        id: "fileList",
        submenu: [],
      },
      { type: "separator" },
      {
        label: "退出",
        accelerator: "ctrl+w",
        click() {
          // 退出程序
          app.quit();
        },
      },
    ],
  },
  {
    label: "查看(V)",
    submenu: [
      {
        label: "显示工具栏",
        type: "checkbox",
        checked: true,
        click(ev) {
          // 输出选中状态
          console.log(ev.checked ? "已选中" : "未选中");
        },
      },
      {
        label: "显示状态栏",
        type: "checkbox",
        checked: false,
        click(ev) {
          // 输出选中状态
          console.log(ev.checked ? "已选中" : "未选中");
        },
      },
    ],
  },
  {
    label: "主题配色风格(C)",
    submenu: [
      {
        label: "亮色",
        type: "radio",
        checked: true,
        click(ev) {
          if (ev.checked) console.log("Light");
        },
      },
      {
        label: "暗色",
        type: "radio",
        click(ev) {
          if (ev.checked) console.log("Dark");
        },
      },
      {
        label: "高对比度",
        type: "radio",
        click(ev) {
          if (ev.checked) console.log("High contrast");
        },
      },
    ],
  },
  {
    label: "预定义功能(G)",
    submenu: [
      {
        label: "打开开发者工具",
        role: "toggledevtools",
      },
      {
        label: "全屏",
        role: "togglefullscreen",
      },
      {
        label: "重新加载",
        role: "reload",
      },
      {
        label: "退出",
        role: "quit",
      },
    ],
  },
  {
    label: "帮助(H)",
    submenu: [
      {
        label: "访问作者官网",
        click() {
          // 打开一个新的窗口访问网站
          const websiteWindow = new BrowserWindow({
            width: 800,
            height: 600,
          });
          websiteWindow.loadURL("http://tomato-lrx.gitee.io/vc");
        },
      },
      { label: "关于" },
    ],
  },
];

const menu = Menu.buildFromTemplate(menuBar);
Menu.setApplicationMenu(menu);
// 动态创建的菜单模板
const fileItem = new MenuItem({
  label: "file1.txt",
});
// 获取 id 为 fileList 的菜单，然后把菜单添加到子菜单中
menu.getMenuItemById("fileList").submenu.append(fileItem);
// 重新设置顶部菜单栏
Menu.setApplicationMenu(menu);

// 上面的功能都无需编写 click ，添加 role 属性就能直接实现。
// 完整的 role 属性说明可以访问：https://www.electronjs.org/docs/api/menu-item 。
